<html>

<head>
    <title>对象是什么？</title>
</head>

<body>
    <table width=100%>
        <tr>
            <td align=left>
                <a href="index.html"><img src=../../images/PreviousArrow.gif width=26 height=26 align=bottom border=0
                        alt="Previous | "></a><a href="messages.html"><img src=../../images/NextArrow.gif width=26
                        height=26 align=bottom border=0 alt="Next | "></a><a href="../../index.html"><img
                        src=../../images/WayUpArrow.gif width=26 height=26 align=bottom border=0
                        alt="Trail Map | "></a><a href="../index.html"><img src=../../images/javaHeader.gif width=26
                        height=26 align=bottom border=0 alt="Writing Java Programs | "></a>
            <td>
            <td align=right>
                <a href="index.html"><strong><em>面向对象编程概念：入门</em></strong></a>
            </td>
        </tr>
    </table>
    <p>
        <hr size=4>

    <h2>
        对象是什么？
    </h2>
    <p>
    <blockquote>

        顾名思义<em>对象</em>是理解面向对象技术的关键概念。你现在可以环顾四周，就会发现许多真实世界中的对象的例子，比如：你的狗，你的桌子，你的电视机，你的自行车。
        <p>
            这些真实世界的对象具有两个特征：它们都存在<em>状态</em>，并且它们都具有<em>行为</em>. 例如，狗存在状态（比如名字、颜色、品种、是否饥饿等），狗还具有行为（比如在你刚洗干净的裤子上汪汪大叫、抓东西、流口水等）。自行车存在状态（当前档位、当前脚踏板的转速、具有两个轮子、档位数量等）和行为（制动、加速、减速、换挡等）。
        <p>
            软件对象是根据真实世界中的对象进行建模的，因此它们也有状态和行为。软件对象使用变量保持其状态，使用方法实现其行为。
            <hr>
            <strong>定义：</strong>对象是数据和相关过程的软件集合体。
            <hr>
            因为软件对象是按照真实世界中的对象进行建模的，所以可以使用软件对象在程序中表示真实世界的对象。您可能希望在动画程序中表示狗，或者在室内电子健身自行车中代表自行车。 除此之外，您也可以使用软件对象来“对象化”抽象概念。例如，“事件”是GUI窗口系统中常用的对象，用于表示用户按下鼠标按钮或敲击键盘上的键时的事件。
        <p>
            下面是软件对象的一个图示：
        <p>
            <center><img src="images/object.trans.gif" width=355 height=167></center>
        <p>
            软件对象具有的状态和可以做出的行为都由该对象内的变量和方法表示。一个模拟真实世界自行车的软件对象将具有指示自行车当前状态的一些变，比如，它以【10英里/小时】的速度前进，当前脚踏板转速为【90转/分钟】，并且当前所处的档位是【5档】。 
        <p>
            <center><img src="images/bicycle.trans.gif" width=265 height=191></center>
        <p>
            软件自行车也有一些方法可以让你刹车、改变脚踏板转速和换挡。（自行车没有改变自行车速度的方法，因为自行车的实际速度取决于你所处档位、踩得有多快以及道路有多陡。）
        <p>
            对象不知道或不能做的任何事情都将从对象中排除。例如，你的自行车（可能）没有名字，它不能自己跑、叫或抓东西。因此，在你的自行车对象中，这些状态和行为没有相应的变量或方法。 
        <p>
            从图中可以看到，对象的变量构成了对象的中心或核心，方法围绕并隐藏对象的核心，使其不受程序中其他对象的影响。将对象的变量包装在其方法的保护性范围内称为<em>封装</em>，通常，封装用于向其他对象隐藏不重要的实现细节。当你想在自行车上换挡时，你不需要知道齿轮机构是如何工作的，你只需要知道该移动哪个杠杆。因此，实现可以随时更改，而不必更改程序的其他部分。
        <h4>封装的好处</h4>
        <blockquote>
            将相关变量和方法封装到一个整洁的软件包中是一个简单但非常强大的想法，它为软件开发人员提供了两个主要好处：
            <ul>
                <li>
                    模块化——可以独立于其他对象的源代码来编写和维护对象的源码。此外，对象可以很容易地在系统中传递。就像现实生活中一样，你可以把你的自行车交给别人，它仍然可以用。
                <li>
                    信息隐藏——一个对象有一个公共接口，其他对象可以使用该接口与其通信。但是对象可以维护私有信息和方法，这些信息和方法可以随时更改，而不会影响依赖它的其他对象。你不需要了解自行车上的齿轮机构就可以使用它。
            </ul>
        </blockquote>

    </blockquote>
    <p>
        <hr size=4>
    <p>
    <table width=100%>
        <tr>
            <td align=left>
                <a href="index.html"><img src=../../images/PreviousArrow.gif width=26 height=26 align=top border=0
                        alt="Previous | "></a><a href="messages.html"><img src=../../images/NextArrow.gif width=26
                        height=26 align=top border=0 alt="Next | "></a><a href="../../index.html"><img
                        src=../../images/WayUpArrow.gif width=26 height=26 align=top border=0 alt="Trail Map | "></a><a
                    href="../index.html"><img src=../../images/javaHeader.gif width=26 height=26 align=top border=0
                        alt="Writing Java Programs | "></a>
            <td>
            <td align=right>
                <a href="TOC.html"><strong><em>目录</em></strong></a>
            </td>
        </tr>
    </table>
</body>

</html>